#include<iostream>
using namespace std;
//const int N = 1e5 + 10;
//int n, k,mod =1e5+3;
//int dp[N];
//
//int main()
//{
//	cin >> n>> k;
//	 dp[0] = 1;
//	 for (int i = 1; i <= n; i++)
//	 {
//		 for (int j = i-k<0?0:i-k; j < i; j++)
//		 {
//			 dp[i] = (dp[i] + dp[j])%mod;
//		 }
//	 }
//	 cout << dp[n];
//	return 0;
//}

//const int N = 2e5 + 10;
//int dp[N],arr[N];
//int n;
//
//int main()
//{
//	cin >> n;
//	int ret = -0x3f3f3f;
//	dp[0] = -0x3f3f3f;
//	for (int i = 1; i <= n; i++)cin >> arr[i];
//	for (int i = 1; i <= n; i++)
//	{
//		dp[i] = max(arr[i], dp[i - 1] + arr[i]);
//		ret = max(ret, dp[i]);
//	}
//	cout << ret;
//	return 0;
//}

const int N = 35;
int dp[N][N];
int n, m;
int main()
{
	dp[0][1] = 1;
	cin >> n >> m;
	for (int i = 1; i <= m; i++)
	{
		for (int j = 1; j <= n; j++)
		{
			if (j == 1)
			{
				dp[i][j] = dp[i - 1][j + 1] + dp[i - 1][n];
			}
			else if (j == n)
			{
				dp[i][j] = dp[i - 1][1] + dp[i - 1][n - 1];
			}
			else dp[i][j] = dp[i - 1][j - 1] + dp[i - 1][j + 1];
		}
	}
	cout << dp[m][1];
	return 0;
}